/**
 * Created with IntelliJ IDEA
 * Description:
 * User: Administrator
 * Data: 2023 - 10 - 14
 * Time: 20:39
 */
//牛客 另类加法
public class Solution6 {
    public int addAB(int A, int B) {
        if(B == 0) return A;
        int sum = 0, carray = 0;
        while(B != 0) {//两数相加，如果不需要进位（carray==0），那么这两个数异或的值就是相加的结果
            sum = A ^ B;//异或^是两数对应二进制位相加的结果（不考虑进位）。新一轮循环A ^ B的结果就是上一轮A和B异或后的对应位上相加的结果（不考虑进位）再加上A和B对应二进制位相加后进位的结果（只考虑进位）
            carray = (A & B) << 1;//与后再左移一位是两数对应二进制位相加后进位的结果（只考虑进位）
            A = sum;
            B = carray;
        }
        return sum;
    }
}
